socsvn commit: r272310 - soc2014/dpl/llvm_examples
dpl at FreeBSD.org
dpl at FreeBSD.org
Tue Aug 12 23:03:12 UTC 2014
Author: dpl
Date: Tue Aug 12 23:03:11 2014
New Revision: 272310
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=272310
Log:
Added necessary boilerplate to get it working without includes.
Added:
soc2014/dpl/llvm_examples/structs.ll
Modified:
soc2014/dpl/llvm_examples/structs.c
Modified: soc2014/dpl/llvm_examples/structs.c
==============================================================================
--- soc2014/dpl/llvm_examples/structs.c Tue Aug 12 22:38:52 2014 (r272309)
+++ soc2014/dpl/llvm_examples/structs.c Tue Aug 12 23:03:11 2014 (r272310)
@@ -1,11 +1,34 @@
-#include <sys/socket.h>
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
+#include <sys/queue.h>
#include <stdio.h>
+struct mbuf {
+ struct mbuf *m_next;
+ struct mbuf *m_nextpkt;
+ void *m_data;
+ int m_len; /* length in this mbuf */
+ int m_flags;
+ struct {
+ struct ifnet *rcvif;
+ int len; /* total packet len */
+ SLIST_HEAD (packet_tags, m_tag) tags;
+ } m_pkthdr;
+ struct skbuf *m_skb;
+
+ /*
+ * in-stack mbuffers point to an external buffer,
+ * the two variables below contain base and size,
+ * and have M_STACK set in m_flags.
+ * Buffers from the heap have __m_extbuf = (char *)m + MSIZE
+ */
+ void *__m_extbuf; /* external buffer base */
+ int __m_extlen; /* data in ext buffer */
+ void (*__m_callback)(struct mbuf *, int);
+ void *__m_peer; /* argument attached to the mbuf */
+};
+
struct mbuf gmbuf;
+#define mtod(m, t) ((t)((m)->m_data))
int
main()
@@ -15,7 +38,7 @@
struct ip *ip = mtod(m, struct ip *);
m = &gmbuf;
- pktlen = m->pkthdr.len;
+ pktlen = m->m_pkthdr.len;
return (0);
}
Added: soc2014/dpl/llvm_examples/structs.ll
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2014/dpl/llvm_examples/structs.ll Tue Aug 12 23:03:11 2014 (r272310)
@@ -0,0 +1,41 @@
+; ModuleID = 'structs.c'
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-freebsd11.0"
+
+%struct.mbuf = type { %struct.mbuf*, %struct.mbuf*, i8*, i32, i32, %struct.anon, %struct.skbuf*, i8*, i32, void (%struct.mbuf*, i32)*, i8* }
+%struct.anon = type { %struct.ifnet*, i32, %struct.packet_tags }
+%struct.ifnet = type opaque
+%struct.packet_tags = type { %struct.m_tag* }
+%struct.m_tag = type opaque
+%struct.skbuf = type opaque
+%struct.ip = type opaque
+
+ at gmbuf = common global %struct.mbuf zeroinitializer, align 8
+
+; Function Attrs: nounwind uwtable
+define i32 @main() #0 {
+entry:
+ %retval = alloca i32, align 4
+ %m = alloca %struct.mbuf*, align 8
+ %pktlen = alloca i32, align 4
+ %ip = alloca %struct.ip*, align 8
+ store i32 0, i32* %retval
+ %0 = load %struct.mbuf** %m, align 8
+ %m_data = getelementptr inbounds %struct.mbuf* %0, i32 0, i32 2
+ %1 = load i8** %m_data, align 8
+ %2 = bitcast i8* %1 to %struct.ip*
+ store %struct.ip* %2, %struct.ip** %ip, align 8
+ store %struct.mbuf* @gmbuf, %struct.mbuf** %m, align 8
+ %3 = load %struct.mbuf** %m, align 8
+ %m_pkthdr = getelementptr inbounds %struct.mbuf* %3, i32 0, i32 5
+ %len = getelementptr inbounds %struct.anon* %m_pkthdr, i32 0, i32 1
+ %4 = load i32* %len, align 4
+ store i32 %4, i32* %pktlen, align 4
+ ret i32 0
+}
+
+attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
+
+!llvm.ident = !{!0}
+
+!0 = metadata !{metadata !"FreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) 20140512"}
More information about the svn-soc-all
mailing list