sgraenitz accepted this revision.
sgraenitz added a comment.
This revision is now accepted and ready to land.

Great! This LGTM. Let's keep the review open for a few days and see if there is 
more feedback.



================
Comment at: llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp:1424
+MCSection *TargetLoweringObjectFileMachO::getSectionForCommandLines() const {
+  return getContext().getMachOSection("__TEXT", "__command_line", 0,
+                                      SectionKind::getReadOnly());
----------------
antoniofrighetto wrote:
> sgraenitz wrote:
> > Can we put it in `__DATA`?
> > 
> > Also the [[ 
> > https://github.com/llvm/llvm-project/blob/release/16.x/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp#L1160
> >  | ELF implementation notes ]] that it "attempts to mimic GCC's switch of 
> > the same name" and thus calls the section `.GCC.command.line`. I guess we 
> > cannot use the dots in MachO, but should we add a `gcc` prefix?
> Whilst I agree it should be better to distinguish this from executable data, 
> I think this should live as read-only data, which `__TEXT` is traditionally 
> for.
> 
> Following MachO conventions, I first tried `__gcc_command_line`, but the [[ 
> https://github.com/llvm/llvm-project/blob/main/llvm/include/llvm/BinaryFormat/MachO.h#L587
>  | section name ]] is restricted to 16 chars, and I'm not sure adding more 
> bytes for the name is worth the change (thus I thought we'd prefer 
> `__command_line` over `__gcc_cmd_line`).
> [...] the section name is restricted to 16 chars, and I'm not sure adding 
> more bytes for the name is worth the change

Ok, then I guess it's fine to keep this as is.

> I think this should live as read-only data, which `__TEXT` is traditionally 
> for.

Oh interesting, I had expected permissions to be `R-X` for everything in the 
text segment, but I might be wrong.  And yes, the command-line string should be 
`R--` (read-only).

So, I looked at a few similar cases in existing code and it confirms your 
statement. `__cstring` e.g. appears to in `__TEXT` as well even though objdump 
will show it as type DATA:
```
Idx Name             Size     VMA              Type
  0 __text           00014029 0000000000000000 TEXT
  1 __StaticInit     0000005f 0000000000014030 TEXT
  ...
  6 __data           00000040 00000000000148e0 DATA
  7 __cstring        0000084b 0000000000014920 DATA
```

I am probably lacking some MachO expertise to understand the details here. 
Since you do the same as we do for `__cstring` in other places, I think this is 
good.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D155716/new/

https://reviews.llvm.org/D155716

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to