| ... | @@ -6124,13 +6124,69 @@ fn formatShdr( | ... | @@ -6124,13 +6124,69 @@ fn formatShdr( |
| 6124 | _ = options; | 6124 | _ = options; |
| 6125 | _ = unused_fmt_string; | 6125 | _ = unused_fmt_string; |
| 6126 | const shdr = ctx.shdr; | 6126 | const shdr = ctx.shdr; |
| 6127 | try writer.print("{s} : @{x} ({x}) : align({x}) : size({x})", .{ | 6127 | try writer.print("{s} : @{x} ({x}) : align({x}) : size({x}) : flags({})", .{ |
| 6128 | ctx.elf_file.getShString(shdr.sh_name), shdr.sh_offset, | 6128 | ctx.elf_file.getShString(shdr.sh_name), shdr.sh_offset, |
| 6129 | shdr.sh_addr, shdr.sh_addralign, | 6129 | shdr.sh_addr, shdr.sh_addralign, |
| 6130 | shdr.sh_size, | 6130 | shdr.sh_size, fmtShdrFlags(shdr.sh_flags), |
| 6131 | }); | 6131 | }); |
| 6132 | } | 6132 | } |
| 6133 | | 6133 | |
| | 6134 | fn fmtShdrFlags(sh_flags: u64) std.fmt.Formatter(formatShdrFlags) { |
| | 6135 | return .{ .data = sh_flags }; |
| | 6136 | } |
| | 6137 | |
| | 6138 | fn formatShdrFlags( |
| | 6139 | sh_flags: u64, |
| | 6140 | comptime unused_fmt_string: []const u8, |
| | 6141 | options: std.fmt.FormatOptions, |
| | 6142 | writer: anytype, |
| | 6143 | ) !void { |
| | 6144 | _ = unused_fmt_string; |
| | 6145 | _ = options; |
| | 6146 | if (elf.SHF_WRITE & sh_flags != 0) { |
| | 6147 | try writer.writeAll("W"); |
| | 6148 | } |
| | 6149 | if (elf.SHF_ALLOC & sh_flags != 0) { |
| | 6150 | try writer.writeAll("A"); |
| | 6151 | } |
| | 6152 | if (elf.SHF_EXECINSTR & sh_flags != 0) { |
| | 6153 | try writer.writeAll("X"); |
| | 6154 | } |
| | 6155 | if (elf.SHF_MERGE & sh_flags != 0) { |
| | 6156 | try writer.writeAll("M"); |
| | 6157 | } |
| | 6158 | if (elf.SHF_STRINGS & sh_flags != 0) { |
| | 6159 | try writer.writeAll("S"); |
| | 6160 | } |
| | 6161 | if (elf.SHF_INFO_LINK & sh_flags != 0) { |
| | 6162 | try writer.writeAll("I"); |
| | 6163 | } |
| | 6164 | if (elf.SHF_LINK_ORDER & sh_flags != 0) { |
| | 6165 | try writer.writeAll("L"); |
| | 6166 | } |
| | 6167 | if (elf.SHF_EXCLUDE & sh_flags != 0) { |
| | 6168 | try writer.writeAll("E"); |
| | 6169 | } |
| | 6170 | if (elf.SHF_COMPRESSED & sh_flags != 0) { |
| | 6171 | try writer.writeAll("C"); |
| | 6172 | } |
| | 6173 | if (elf.SHF_GROUP & sh_flags != 0) { |
| | 6174 | try writer.writeAll("G"); |
| | 6175 | } |
| | 6176 | if (elf.SHF_OS_NONCONFORMING & sh_flags != 0) { |
| | 6177 | try writer.writeAll("O"); |
| | 6178 | } |
| | 6179 | if (elf.SHF_TLS & sh_flags != 0) { |
| | 6180 | try writer.writeAll("T"); |
| | 6181 | } |
| | 6182 | if (elf.SHF_X86_64_LARGE & sh_flags != 0) { |
| | 6183 | try writer.writeAll("l"); |
| | 6184 | } |
| | 6185 | if (elf.SHF_MIPS_ADDR & sh_flags != 0 or elf.SHF_ARM_PURECODE & sh_flags != 0) { |
| | 6186 | try writer.writeAll("p"); |
| | 6187 | } |
| | 6188 | } |
| | 6189 | |
| 6134 | const FormatPhdrCtx = struct { | 6190 | const FormatPhdrCtx = struct { |
| 6135 | elf_file: *Elf, | 6191 | elf_file: *Elf, |
| 6136 | phdr: elf.Elf64_Phdr, | 6192 | phdr: elf.Elf64_Phdr, |