|  | // 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 |