// Copyright 2016 The Fuchsia Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // This file defines macros to handle the output of the shlib-symbols // script (run without the -a switch). These macros generate assembly // code that should define symbols in a DSO such that the resultant DSO // has the same ABI as the DSO input to shlib-symbols. #define FUNCTION(NAME, SIZE) FUNCTION_1(global, NAME) #define WEAK_FUNCTION(NAME, SIZE) FUNCTION_1(weak, NAME) #define FUNCTION_1(BINDING, NAME) \ .pushsection .text,"ax",%progbits; \ .BINDING NAME; \ .type NAME,%function; \ NAME: .space 1; \ .popsection #define OBJECT_1(SECTION, SECFLAGS, SECTYPE, BINDING, NAME, SIZE) \ .pushsection SECTION,SECFLAGS,%SECTYPE; \ .BINDING NAME; \ .type NAME,%object; \ NAME: .space SIZE; \ .size NAME,SIZE; \ .popsection #define RODATA_OBJECT(NAME, SIZE) \ OBJECT_1(.rodata, "a", progbits, global, NAME, SIZE) #define DATA_OBJECT(NAME, SIZE) \ OBJECT_1(.data, "aw", progbits, global, NAME, SIZE) #define WEAK_DATA_OBJECT(NAME, SIZE) \ OBJECT_1(.data, "aw", progbits, weak, NAME, SIZE) #define BSS_OBJECT(NAME, SIZE) \ OBJECT_1(.bss, "aw", nobits, global, NAME, SIZE) #define UNDEFINED_WEAK(NAME, SIZE) UNDEFINED_1(weak, NAME) #define UNDEFINED(NAME, SIZE) UNDEFINED_1(globl, NAME) #define UNDEFINED_1(BINDING, NAME) \ .pushsection .undefined,"aw",%progbits; \ .BINDING NAME; \ .dc.a NAME; \ .popsection