AuxiliaryVector.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * Copyright (c) 2020, the SerenityOS developers.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/StringView.h>
  8. #include <AK/Types.h>
  9. #include <Kernel/API/POSIX/sys/auxv.h>
  10. static_assert(sizeof(auxv_t) % sizeof(FlatPtr) == 0);
  11. namespace ELF {
  12. struct AuxiliaryValue {
  13. enum Type {
  14. Null = AT_NULL,
  15. Ignore = AT_IGNORE,
  16. ExecFileDescriptor = AT_EXECFD,
  17. Phdr = AT_PHDR,
  18. Phent = AT_PHENT,
  19. Phnum = AT_PHNUM,
  20. PageSize = AT_PAGESZ,
  21. BaseAddress = AT_BASE,
  22. Flags = AT_FLAGS,
  23. Entry = AT_ENTRY,
  24. NotELF = AT_NOTELF,
  25. Uid = AT_UID,
  26. EUid = AT_EUID,
  27. Gid = AT_GID,
  28. EGid = AT_EGID,
  29. Platform = AT_PLATFORM,
  30. HwCap = AT_HWCAP,
  31. ClockTick = AT_CLKTCK,
  32. Secure = AT_SECURE,
  33. BasePlatform = AT_BASE_PLATFORM,
  34. Random = AT_RANDOM,
  35. HwCap2 = AT_HWCAP2,
  36. ExecFilename = AT_EXECFN,
  37. ExeBaseAddress = AT_EXE_BASE,
  38. ExeSize = AT_EXE_SIZE
  39. };
  40. AuxiliaryValue(Type type, long val)
  41. {
  42. auxv.a_type = type;
  43. auxv.a_un.a_val = val;
  44. }
  45. AuxiliaryValue(Type type, void* ptr)
  46. {
  47. auxv.a_type = type;
  48. auxv.a_un.a_ptr = (void*)ptr;
  49. }
  50. AuxiliaryValue(Type type, StringView string)
  51. : optional_string(string)
  52. {
  53. auxv.a_type = type;
  54. auxv.a_un.a_ptr = nullptr;
  55. }
  56. auxv_t auxv {};
  57. StringView optional_string;
  58. };
  59. }