1 #
   2 # This file and its contents are supplied under the terms of the
   3 # Common Development and Distribution License ("CDDL"), version 1.0.
   4 # You may only use this file in accordance with the terms of version
   5 # 1.0 of the CDDL.
   6 #
   7 # A full copy of the text of the CDDL should have accompanied this
   8 # source.  A copy of the CDDL is also available via the Internet at
   9 # http://www.illumos.org/license/CDDL.
  10 #
  11 
  12 # Copyright 2012, Richard Lowe.
  13 
  14 include $(SRC)/Makefile.master
  15 
  16 # We have to use GCC, and only GCC.  The best way is to ask cw(1) which GCC to use.
  17 CC_CMD =        $(ONBLD_TOOLS)/bin/$(MACH)/cw -_gcc -_compiler
  18 CC =            $(CC_CMD:sh)
  19 CFLAGS =        -O1 -m64
  20 
  21 LINK.c = env LD_ALTEXEC=$(PROTO)/usr/bin/amd64/ld $(CC) $(CFLAGS) -o $@ $^
  22 COMPILE.c = $(CC) $(CFLAGS) -c -o $@ $^
  23 COMPILE.s = $(CC) $(CFLAGS) -c -o $@ $^
  24 
  25 .KEEP_STATE:
  26 
  27 install default: all
  28 
  29 .c.o:
  30         $(COMPILE.c)
  31 
  32 .s.o:
  33         $(COMPILE.s)
  34 
  35 # A basic use of TLS that uses the movq m/r --> movq i/r variant
  36 PROGS +=        style2
  37 STYLE2OBJS =    style2.o
  38 style2: $(STYLE2OBJS)
  39         $(LINK.c)
  40 
  41 # A copy of style2 that uses %r13 in the TLS sequence, and thus excercises the
  42 # REX transitions of the movq mem,reg -> movq imm,reg variant.
  43 PROGS +=        style2-with-r13
  44 STYLE2R13OBJS = style2-with-r13.o
  45 style2-with-r13: $(STYLE2R13OBJS)
  46         $(LINK.c)
  47 
  48 # A copy of style2 that uses %r12 in the TLS sequence, so we can verify that
  49 # it is _not_ special to this variant
  50 PROGS +=        style2-with-r12
  51 STYLE2R12OBJS = style2-with-r12.o
  52 style2-with-r12: $(STYLE2R12OBJS)
  53         $(LINK.c)
  54 
  55 # A copy of style2 that has a R_AMD64_GOTTPOFF relocation with a bad insn sequence
  56 STYLE2BADNESSOBJS =     style2-with-badness.o
  57 style2-with-badness: $(STYLE2BADNESSOBJS)
  58         -$(LINK.c)
  59 
  60 # A basic use of TLS that uses the addq mem/reg --> leaq mem,reg variant
  61 PROGS +=        style1
  62 STYLE1OBJS =    style1-main.o style1-func.o
  63 style1: $(STYLE1OBJS)
  64         $(LINK.c)
  65 
  66 # A copy of style1-func that uses %r13 in the TLS sequence and thus excercises
  67 # the REX transitions. of the addq mem,reg --> leaq mem,reg variant
  68 PROGS +=        style1-with-r13
  69 STYLE1R13OBJS = style1-main.o style1-func-with-r13.o
  70 style1-with-r13: $(STYLE1R13OBJS)
  71         $(LINK.c)
  72 
  73 # A copy of style1-func that uses %r12 to test the addq mem,reg --> addq imm,reg variant
  74 PROGS +=        style1-with-r12
  75 STYLE1R12OBJS = style1-main.o style1-func-with-r12.o
  76 style1-with-r12: $(STYLE1R12OBJS)
  77         $(LINK.c)
  78 
  79 all:    $(PROGS)
  80 
  81 clobber clean: 
  82         rm -f $(PROGS) $(STYLE1OBJS) $(STYLE1R13OBJS) $(STYLE1R12OBJS) \
  83             $(STYLE2OBJS) $(STYLE2R13OBJS) $(STYLE2R12OBJS) $(STYLE2BADNESSOBJS)
  84 
  85 fail: style2-with-badness FRC
  86 
  87 FRC: