Vous avez reçu un message "Your GitLab account has been locked ..." ? Pas d'inquiétude : lisez cet article https://docs.gricad-pages.univ-grenoble-alpes.fr/help/unlock/

Commit 30feb31c authored by Xavier Leroy's avatar Xavier Leroy Committed by Xavier Leroy
Browse files

Introduce and use PrintAsmaux.variable_section

This is a generalization of the previous PrintAsmaux.common_section
function that
- handles initialized variables in addition to uninitialized variables;
- can be used for Section_const, not just for Section_data.
parent 25483cf1
......@@ -162,9 +162,9 @@ module ELF_System : SYSTEM =
let name_of_section = function
| Section_text -> ".text"
| Section_data i | Section_small_data i ->
if i then ".data" else common_section ()
variable_section ~sec:".data" ~bss:".bss" i
| Section_const i | Section_small_const i ->
if i || (not !Clflags.option_fcommon) then ".section .rodata" else "COMM"
variable_section ~sec:".section .rodata" i
| Section_string -> ".section .rodata"
| Section_literal -> ".section .rodata"
| Section_jumptable -> ".section .rodata"
......@@ -224,9 +224,9 @@ module MacOS_System : SYSTEM =
let name_of_section = function
| Section_text -> ".text"
| Section_data i | Section_small_data i ->
if i || (not !Clflags.option_fcommon) then ".data" else "COMM"
variable_section ~sec:".data" i
| Section_const i | Section_small_const i ->
if i || (not !Clflags.option_fcommon) then ".section __DATA,__CONST" else "COMM"
variable_section ~sec:".section __DATA,__CONST" i
| Section_string -> ".const"
| Section_literal -> ".const"
| Section_jumptable -> ".text"
......
......@@ -148,9 +148,9 @@ struct
let name_of_section = function
| Section_text -> ".text"
| Section_data i | Section_small_data i ->
if i then ".data" else common_section ()
variable_section ~sec:".data" ~bss:".bss" i
| Section_const i | Section_small_const i ->
if i || (not !Clflags.option_fcommon) then ".section .rodata" else "COMM"
variable_section ~sec:".section .rodata" i
| Section_string -> ".section .rodata"
| Section_literal -> ".text"
| Section_jumptable -> ".text"
......
......@@ -303,11 +303,16 @@ let print_version_and_options oc comment =
fprintf oc " %s" Commandline.argv.(i)
done;
fprintf oc "\n"
(** Get the name of the common section if it is used otherwise the given section
name, with bss as default *)
let common_section ?(sec = ".bss") () =
if !Clflags.option_fcommon then
"COMM"
else
sec
(** Determine the name of the section to use for a variable.
[i] says whether the variable is initialized (true) or not (false).
[sec] is the name of the section to use if initialized or if
no other cases apply.
[bss] is the name of the section to use if uninitialized and
common declarations are not used. If not provided, [sec] is used.
*)
let variable_section ~sec ?bss i =
if i then sec
else if !Clflags.option_fcommon then "COMM"
else match bss with None -> sec | Some b -> b
......@@ -118,22 +118,16 @@ module Linux_System : SYSTEM =
let name_of_section = function
| Section_text -> ".text"
| Section_data i ->
if i then
".data"
else
common_section ~sec:".section .bss" ()
variable_section ~sec:".data" ~bss:".section .bss" i
| Section_small_data i ->
if i then
".section .sdata,\"aw\",@progbits"
else
common_section ~sec:".section .sbss,\"aw\",@nobits" ()
variable_section
~sec:".section .sdata,\"aw\",@progbits"
~bss:".section .sbss,\"aw\",@nobits"
i
| Section_const i ->
if i || (not !Clflags.option_fcommon) then ".rodata" else "COMM"
variable_section ~sec:".rodata" i
| Section_small_const i ->
if i || (not !Clflags.option_fcommon) then
".section .sdata2,\"a\",@progbits"
else
"COMM"
variable_section ~sec:".section .sdata2,\"a\",@progbits" i
| Section_string -> ".rodata"
| Section_literal -> ".section .rodata.cst8,\"aM\",@progbits,8"
| Section_jumptable -> ".text"
......@@ -218,7 +212,7 @@ module Diab_System : SYSTEM =
let name_of_section = function
| Section_text -> ".text"
| Section_data i -> if i then ".data" else common_section ()
| Section_data i -> variable_section ~sec:".data" ~bss:".bss" i
| Section_small_data i -> if i then ".sdata" else ".sbss"
| Section_const _ -> ".text"
| Section_small_const _ -> ".sdata2"
......
......@@ -108,9 +108,9 @@ module Target : TARGET =
let name_of_section = function
| Section_text -> ".text"
| Section_data i | Section_small_data i ->
if i then ".data" else common_section ()
variable_section ~sec:".data" ~bss:".bss" i
| Section_const i | Section_small_const i ->
if i || (not !Clflags.option_fcommon) then ".section .rodata" else "COMM"
variable_section ~sec:".section .rodata" i
| Section_string -> ".section .rodata"
| Section_literal -> ".section .rodata"
| Section_jumptable -> ".section .rodata"
......
......@@ -134,9 +134,9 @@ module ELF_System : SYSTEM =
let name_of_section = function
| Section_text -> ".text"
| Section_data i | Section_small_data i ->
if i then ".data" else common_section ()
variable_section ~sec:".data" ~bss:".bss" i
| Section_const i | Section_small_const i ->
if i || (not !Clflags.option_fcommon) then ".section .rodata" else "COMM"
variable_section ~sec:".section .rodata" i
| Section_string -> ".section .rodata"
| Section_literal -> ".section .rodata.cst8,\"aM\",@progbits,8"
| Section_jumptable -> ".text"
......@@ -192,9 +192,9 @@ module MacOS_System : SYSTEM =
let name_of_section = function
| Section_text -> ".text"
| Section_data i | Section_small_data i ->
if i || (not !Clflags.option_fcommon) then ".data" else "COMM"
variable_section ~sec:".data" i
| Section_const i | Section_small_const i ->
if i || (not !Clflags.option_fcommon) then ".const" else "COMM"
variable_section ~sec:".const" i
| Section_string -> ".const"
| Section_literal -> ".literal8"
| Section_jumptable -> ".text"
......@@ -254,9 +254,9 @@ module Cygwin_System : SYSTEM =
let name_of_section = function
| Section_text -> ".text"
| Section_data i | Section_small_data i ->
if i then ".data" else common_section ()
variable_section ~sec:".data" ~bss:".bss" i
| Section_const i | Section_small_const i ->
if i || (not !Clflags.option_fcommon) then ".section .rdata,\"dr\"" else "COMM"
variable_section ~sec:".section .rdata,\"dr\"" i
| Section_string -> ".section .rdata,\"dr\""
| Section_literal -> ".section .rdata,\"dr\""
| Section_jumptable -> ".text"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment