Commit 014883f2 authored by Xavier Leroy's avatar Xavier Leroy Committed by Xavier Leroy
Browse files

Fix regression on PowerPC / Diab

On PowerPC/Diab, common declarations must not be used for small data sections.

Add a `~common` option to `PrintAsmaux.variable_section` to control
the use of common declarations.  The default is whatever is specified
on the command line using the `-fcommon` and `-fno-common` options.

Use `~common:false` for `Section_small_data` on PowerPC / Diab.

Note that on PowerPC/Linux, GCC uses common declarations for uninitialized
variables in small data section, so we keep doing this in CompCert as well.
parent ed89275c
......@@ -312,12 +312,17 @@ let print_version_and_options oc comment =
containing relocations. If not provided, [sec] is used.
- [bss] is the name of the section to use if uninitialized and
common declarations are not used. If not provided, [sec] is used.
- [common] says whether common declarations can be used for uninitialized
variables. It defaults to the status of the [-fcommon] / [-fno-common]
command-line option. Passing [~common:false] is needed when
common declarations cannot be used at all, for example in the context of
small data areas.
*)
let variable_section ~sec ?bss ?reloc i =
let variable_section ~sec ?bss ?reloc ?(common = !Clflags.option_fcommon) i =
match i with
| Uninit ->
if !Clflags.option_fcommon
if common
then "COMM"
else begin match bss with Some s -> s | None -> sec end
| Init -> sec
......
......@@ -212,8 +212,10 @@ module Diab_System : SYSTEM =
let name_of_section = function
| Section_text -> ".text"
| Section_data i -> variable_section ~sec:".data" ~bss:".bss" i
| Section_small_data i -> variable_section ~sec:".sdata" ~bss:".sbss" i
| Section_data i ->
variable_section ~sec:".data" ~bss:".bss" i
| Section_small_data i ->
variable_section ~sec:".sdata" ~bss:".sbss" ~common:false i
| Section_const _ -> ".text"
| Section_small_const _ -> ".sdata2"
| Section_string -> ".text"
......
Supports Markdown
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